package cn.tedu._04mvcboot02.controller;

import cn.tedu._04mvcboot02.commom.response.JsonResult;
import cn.tedu._04mvcboot02.mapeer.UserMapper;
import cn.tedu._04mvcboot02.pojo.dto.InsertDTO;
import cn.tedu._04mvcboot02.pojo.dto.UserUpdateDTO;
import cn.tedu._04mvcboot02.pojo.entity.User;
import cn.tedu._04mvcboot02.pojo.vo.UserListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

/**
 * RestController: 组合注解,等价于Controller注解加ResponseBody注解
 */
@Api(tags = "用户管理")
@Slf4j
@RestController
@RequestMapping("v1/users/")
public class UserController {
    //自动装配
    //required = false参数: 装配不成功也不会报错
    @Autowired(required = false)
    private UserMapper userMapper;

    /**
     * 添加用户信息
     */
    @ApiOperation(value = "添加用户信息")
    @PostMapping("insert")
    private JsonResult addUser(InsertDTO insertDTO){
        //类上添加了@Slf4j注解,该注解创建了一个日志对象log
        log.debug("InsertDTO"+insertDTO);
        /*
            1.在user表中插入数据[接口方法]
         */
        User user=new User();
        // 把insertDTO中所有的属性复制到user中
        BeanUtils.copyProperties(insertDTO,user);
        user.setCreated(new Date());
        userMapper.insertUser(user);
        return JsonResult.ok();
    }
    /**
     * 用户列表
     */
    @ApiOperation("用户列表")
    @GetMapping ("userList")
    private JsonResult selectUser(){
        //类上添加了@Slf4j注解,该注解创建了一个日志对象log
        log.debug("");
        List<UserListVO> userListVOS = userMapper.selectUserList();
        return JsonResult.ok(userListVOS);
    }
    /**
     * 删除用户信息
     */
    @ApiOperation("删除用户信息")
    @GetMapping("delete")
    @ApiImplicitParam(name = "id",value = "用户id",required = true,dataType = "int")
    private JsonResult deleteUser(int id){
        //类上添加了@Slf4j注解,该注解创建了一个日志对象log
        log.debug("开始处理删除用户信息的日志");
        if (id<=0){
            throw new IllegalArgumentException("ID值无效");
        }
        /*
            1.调用接口方法删除用户
         */
        userMapper.deleteByid(id);
        return JsonResult.ok();
    }
    /**
     * 修改用户信息
     */
    @ApiOperation("修改用户信息")
    @PostMapping("update")
    private JsonResult update(UserUpdateDTO userUpdateDTO){
        //类上添加了@Slf4j注解,该注解创建了一个日志对象log
        log.debug("userUpdateDTO"+userUpdateDTO);
        userMapper.updateByid(userUpdateDTO);
        return JsonResult.ok();
    }
    /**
     * 根据用户的id查询该用户的所有信息
     * URL地址设计: v1/users/用户id
     * 请求方法:GET
     * 响应类型: Users实体类型
     */
    @ApiOperation("根据id查询信息")
    @ApiImplicitParam(name = "id",value = "用户id",required = true,dataType = "int")
    @GetMapping("{id}")
    public  Object seleteByIdd(@PathVariable int id){
        //类上添加了@Slf4j注解,该注解创建了一个日志对象log

        User user = userMapper.seleteUserByIdd(id);
        return JsonResult.ok(user);
    }
}
